草庐IT

Android AsyncTask 内存泄漏

全部标签

c++ - 局部变量在超出范围时删除另一个变量的内存

这个问题在这里已经有了答案:WhatisTheRuleofThree?(8个答案)关闭9年前。在设计动态分配内存的类时,我遇到了以下有关内存分配的问题。我希望你们中的一些人能够为我指明正确的方向,让我知道我应该如何以更好的方式设计我的类(class)。我的类动态分配内存,因此也在其析构函数中将其删除。为了说明问题,请考虑以下愚蠢的类声明:classtestClass{int*data;public:testClass(){data=newint;*data=5;}~testClass(){deletedata;}};到目前为止一切顺利。现在假设我在main中创建了这些对象之一intma

深入浅出Rust内存安全:构建更安全、高效的系统应用

在过去几年中,Rust编程语言以其独特的安全保障特性和高效的性能,成为了众多开发者和大型科技公司的新宠。尤其是其内存安全特性,成为了广泛讨论和赞扬的焦点。本文旨在深入探讨内存安全的概念、Rust在内存安全方面的独到之处,以及这些特性对系统开发的深远影响。内存安全概述在讨论Rust的内存安全之前,我们先来理解一下内存安全这个概念。内存安全是指在程序运行过程中,对内存访问的控制,保证程序可以正确、安全地处理内存中的数据。不正确的内存访问可能导致各种严重问题,比如数据泄露、程序崩溃和安全漏洞等。常见的内存安全问题包括但不限于:缓冲区溢出:当程序写入的数据超过了分配的内存大小时,会覆盖相邻内存区域的数

c++ - 同一个变量的不同内存地址

为什么两个k的地址不同,如以下代码的输出所示?#include#include#include#includeusingnamespacestd;intanu[1000000];intcalc(inta,intb,intc,intd){longlongintk;k=(longlongint)a*d*d+b*d+c;returnk%1000000;}intmain(){intt,n,i,a,b,c,d,k;scanf("%d",&t);while(t--){scanf("%d%d%d%d%d",&n,&a,&b,&c,&d);memset(anu,0,sizeof(int)*100000

c++ - 在哪里释放 Bison/Flex 中的内存?

我使用Bison&Flex或多或少1个月,所以如果我没有看到明显的东西(但我认为不是),我很抱歉。我在使用FlexBison释放内存时遇到问题。这是我的代码的样子:parser.l{DATE}{yylval.str=strdup(yytext);pairnewpair=make_pair("DATE",yytext);myvector.push_back(newpair);returnTOKEN_DATE;}这是我的.l文件的示例之一。我将yytext的值复制到yylval.str中。然后我用该内容(实际上是键/值)创建一个新对,然后返回bison的token日期。我的解析器.y不超过

c++ - 构造函数泄漏

如果我在对象的构造函数中使用new分配内存并在抛出异常后立即分配内存,我会泄漏吗?根本不应该构造对象,因此不会调用析构函数,但是那block内存呢?例如MyObject(){data=newchar[200];//Willthisbeleaked?if(something_is_wrong)throwexception();} 最佳答案 它会泄漏。一旦你从new获得了一个指针,它最终需要被deleted。解决方案是让data成为一个智能指针(或者在这种情况下,可能是一个std::string);虽然不会调用MyObject的析构函数

c++ - 使用智能指针进行手动内存管理的最佳策略?

是否有推荐的策略来处理需要手动管理原始指针的外部库。例如,一个采用指针vector的方法:ALibraryFunc(std::vectorp);所以通常你会用类似的东西创建你的vector:std::vectormyVec;for(...){myVec.push_back(newALibraryData(args));}//andthenret=ALibraryFunc(myVec);//andthenfor(auto&a:myVec){deletea;}myVec.clear();我更喜欢使用智能指针,但图书馆不接受它们。这让我想知道这样的事情是否比手动完成更臭:std::vecto

使用 "new"的 C++ 动态内存分配

我是C++的新手,正在尝试自学(我有Java背景)。有动态内存分配的概念,我可以使用new分配给一个数组(例如)。在C(以及C++)中,我有malloc和realloc正在执行此操作。在C++中,出于某种我无法理解的原因,他们添加了new。我已经阅读了很多有关进入堆栈的普通数组与进入堆的动态分配数组之间的区别的文章。所以我的理解是,通过使用new我在堆中分配空间,当完成一个函数时不会自动删除,但会保留在原处直到我最后,手动释放它。我找不到在普通内存上使用动态内存分配的实际例子。据说我在使用普通数组时无法通过运行时分配内存。好吧,可能我没有理解正确,因为当我尝试创建一个普通数组(没有ne

c++ - Cuda:固定内存零拷贝问题

我尝试了此链接中的代码IsCUDApinnedmemoryzero-copy?提出要求的人声称该程序对他来说效果很好但对我的工作方式不同如果我在内核中操作它们,这些值不会改变。基本上我的问题是,我的GPU内存不够,但我想进行需要更多内存的计算。我的程序使用RAM内存或主机内存,并能够使用CUDA进行计算。链接中的程序似乎解决了我的问题,但代码没有给出该人显示的输出。有关零拷贝内存的任何帮助或任何工作示例都会很有用。谢谢__global__voidtestPinnedMemory(double*mem){doublecurrentValue=mem[threadIdx.x];printf

c++ - 为什么内存泄漏只发生在赋值运算符重载的情况下而不发生在复制构造函数中以及 copy-and-swap 习语如何解决它

P.S:我是编程新手,所以请用更简单的术语回答我的疑问。我找到了几个答案,但无法理解。下面是复制构造函数和赋值运算符重载。templateMystack::Mystack(constMystack&source)//copyconstructor{input=newT[source.capacity];top=source.top;capacity=source.capacity;for(inti=0;iMystack&Mystack::operator=(constMystack&source)//assignmentoperatoroverload{input=newT[sourc

c++ - 此代码是否提供内存泄漏?

最后我安装了Ubuntu并设置了Qt+Valgrind来防止内存泄漏,这在Windows中是做不到的。所以我不明白这段代码是否会导致内存泄漏?事实上,Valgrind说我只有500多个问题,但与泄漏无关。我#include#include#include#includeintmain(intargc,char*argv[]){QApplicationa(argc,argv);QWidget*wdgt=newQWidget;//thislineshouldbethecauseofleakage//ifitexist(asfarasiknow)QVBoxLayout*layout=newQ